home *** CD-ROM | disk | FTP | other *** search
- unit Ddeddlg;
-
- interface
-
- uses SysUtils,WinTypes, WinProcs, Classes, Graphics, Forms, Controls, StdCtrls, Tabs,
- Buttons, ExtCtrls, DBCtrls, Mask, DB, DBTables, Dialogs, Grids;
-
- type
- TDDMultPageDlg = class(TForm)
- TabSet: TTabSet;
- Notebook: TNotebook;
- GroupBox1: TGroupBox;
- GroupBox2: TGroupBox;
- GroupBox3: TGroupBox;
- DataSource1: TDataSource;
- EditTABLE_NAME: TDBEdit;
- Label8: TLabel;
- Label1: TLabel;
- EditFIELD_NAME: TDBEdit;
- Label3: TLabel;
- EditFIELD_LEN: TDBEdit;
- CheckBoxREQUIRED: TDBCheckBox;
- CheckBoxHASLINK: TDBCheckBox;
- CheckBoxMDX: TDBCheckBox;
- CheckBoxIS_CALC: TDBCheckBox;
- Label15: TLabel;
- EditSCR_PROMPT: TDBEdit;
- Label14: TLabel;
- EditHINT: TDBEdit;
- B_hints: TButton;
- FontButton: TButton;
- FontDialog1: TFontDialog;
- B_done: TButton;
- Button1: TButton;
- Label9: TLabel;
- DBEditSCR_FMT: TDBEdit;
- L_expression: TLabel;
- Label18: TLabel;
- EditSRCLINKTBL: TDBEdit;
- Label19: TLabel;
- EditSRCLINKFLD: TDBEdit;
- Label21: TLabel;
- MemoFORMULA: TDBMemo;
- MemoIDX_EXPRES: TDBMemo;
- Label6: TLabel;
- Label7: TLabel;
- Label11: TLabel;
- DBEditGRD_PROMPT: TDBEdit;
- DBEditGRD_WIDTH: TDBEdit;
- Label12: TLabel;
- DBMemoHELP: TDBMemo;
- Label13: TLabel;
- Label16: TLabel;
- DBEditHelpID: TDBEdit;
- Label17: TLabel;
- MemoVALIDVALUE: TDBMemo;
- LEditMask: TLabel;
- EditEDITMASK: TDBEdit;
- Label20: TLabel;
- DBEditDEFAULT: TDBEdit;
- Label22: TLabel;
- Label24: TLabel;
- GroupBox4: TGroupBox;
- Label10: TLabel;
- Label25: TLabel;
- DBMemoDefine: TDBMemo;
- GroupBox5: TGroupBox;
- DBMemoNotes: TDBMemo;
- DBTextTABLE_NAME: TDBText;
- DBTextFIELD_NAME: TDBText;
- DBTextTable_name2: TDBText;
- DBTextFieldName2: TDBText;
- DBTextTable_Name3: TDBText;
- DBTextField_name3: TDBText;
- DBEditMinVal: TDBEdit;
- DBEditMaxVal: TDBEdit;
- DBMemoVallist: TDBMemo;
- Label23: TLabel;
- Label26: TLabel;
- Label27: TLabel;
- Label28: TLabel;
- FieldType_DBRadioGroup: TDBRadioGroup;
- TableType_DBRadioGroup: TDBRadioGroup;
- GroupBox6: TGroupBox;
- DBNavigator1: TDBNavigator;
- Label4: TLabel;
- Label5: TLabel;
- Label29: TLabel;
- Label30: TLabel;
- Label31: TLabel;
- Label32: TLabel;
- Label33: TLabel;
- Label34: TLabel;
- Label35: TLabel;
- editmaskinfo: TEdit;
- Label2: TLabel;
- Label36: TLabel;
- Label37: TLabel;
- SG_1: TStringGrid;
- SG_2: TStringGrid;
- LB_table1: TListBox;
- LB_table2: TListBox;
- Label38: TLabel;
- Label39: TLabel;
- procedure FormCreate(Sender: TObject);
- procedure TabSetClick(Sender: TObject);
- procedure AnywhereKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- procedure B_hintsClick(Sender: TObject);
- procedure FontButtonClick(Sender: TObject);
- procedure B_resizeClick(Sender: TObject);
- procedure DBEditMemoDblClick(Sender: TObject);
- procedure EnterEditField(Sender: TObject);
- procedure ExitEditField(Sender: TObject);
- procedure ExitReqField(Sender: TObject);
- Procedure table1Field_typeValidate(sender: TField);
- procedure EditFIELD_LENEnter(Sender: TObject);
- procedure DataSource1StateChange(Sender: TObject);
- procedure FormActivate(Sender: TObject);
- procedure DataSource1DataChange(Sender: TObject; Field: TField);
- procedure CheckBoxMDXClick(Sender: TObject);
- procedure CheckBoxMDXEnter(Sender: TObject);
- procedure CheckBoxHASLINKClick(Sender: TObject);
- procedure CheckBoxHASLINKEnter(Sender: TObject);
- procedure CheckBoxIS_CALCClick(Sender: TObject);
- procedure CheckBoxIS_CALCEnter(Sender: TObject);
- procedure FieldType_DBRadioGroupChange(Sender: TObject);
- procedure MemoIDX_EXPRESEnter(Sender: TObject);
- procedure MemoIDX_EXPRESExit(Sender: TObject);
- procedure FormKeyPress(Sender: TObject; var Key: Char);
- procedure Button1Click(Sender: TObject);
- procedure LB_table1Click(Sender: TObject);
- procedure B_doneClick(Sender: TObject);
- procedure SG_1DblClick(Sender: TObject);
- procedure SG_2DblClick(Sender: TObject);
- private
- procedure toggleIDXMemoDisplay;
- procedure toggleLINKFldsDisplay;
- procedure toggleFormulaDisplay;
- procedure Field_len_Setup;
- procedure RefreshDictGrid;
- procedure Table_To_SG(const Tablename : string; var whichGrid : TStringGrid);
- public
- end;
-
- var
- DDMultPageDlg: TDDMultPageDlg;
-
- implementation
- uses mainmenu, editmemo, dbutils, runinfo, mystrng, utils;
- Const
- Hintstr = 'Hints ';
- HintsOn = Hintstr+'on';
- HintsOff = Hintstr+'off';
-
- {$R *.DFM}
-
- procedure TDDMultPageDlg.FormCreate(Sender: TObject);
- var i : tFieldType;
- begin
- { make the number of Tabs = number of Pages,
- and have the same names }
- TabSet.Tabs := Notebook.Pages;
- with FieldType_DBRadioGroup.items do begin
- clear;
- for i := ftSTring to ftGraphic do
- add(fieldtypeltr[i]+': '+fieldtypestr[i]);
- end;
- with FieldType_DBRadioGroup.values do begin
- clear;
- for i := ftSTring to ftGraphic do
- add(fieldtypeStr[i]);
- end;
- with TableType_DBRadioGroup.items do begin
- clear;
- add('ttDefault');
- add('ttdBase');
- add('ttParadox');
- add('ttASCII');
- end;
- end;
-
- procedure TDDMultPageDlg.FormActivate(Sender: TObject);
- begin
- Screen.cursor := crHourGlass;
- showhint := true;
- B_hints.caption := Hintson;
- DDMultPageDlg.caption := 'Editing '+main.ddListBox.items[0];
- if openDB(main.sourcedatabase, main.dictTable, main.DictQuery, DataSource1,
- main.DDPathName, Main.DDTableName)
- then begin
- RefreshDictGrid;
- if main.EditThisfield
- then
- with main.dicttable do begin
- first;
- while not eof do
- if (fields[0].text = main.gotoTable) and (fields[2].text = main.gotoField)
- then break
- else next;
- end; {with}
- main.dicttable.edit;
- Screen.cursor := crDefault;
- show;
- end;
- Screen.cursor := crDefault;
- end;
-
- procedure TDDMultPageDlg.TabSetClick(Sender: TObject);
- begin
- { set visible Page to which Tab was clicked }
- Notebook.PageIndex := TabSet.TabIndex;
- end;
-
- procedure TDDMultPageDlg.RefreshDictGrid;
- var i : integer;
- begin
- DictCtrl.FillStringGrid(main.DictTable);
- with DictCtrl.FDBSG do begin
- SG_1.rowcount := rowcount;
- SG_1.colcount := colcount;
- for i := 0 to rowcount do
- SG_1.rows[i].clear;
- for i := ord(ddfField_name) to ord(ddfformula) do
- SG_1.cells[i-1,0] := DictTableFieldNames[ddfOffsets(i)];
- SG_2.rowcount := rowcount;
- SG_2.colcount := colcount;
- for i := 0 to rowcount do
- SG_2.rows[i].clear;
- for i := ord(ddfField_name) to ord(ddfformula) do
- SG_2.cells[i-1,0] := DictTableFieldNames[ddfOffsets(i)];
- end;
- LB_table1.items := DictCtrl.FDBTableList;
- LB_table2.items := LB_Table1.items;
- end;
-
- procedure TDDMultPageDlg.Table_To_SG(const Tablename : string; var whichGrid : TStringGrid);
- {used when clicking on a table list to set up adjacent string grid with that
- tables fields}
- var tmpstr : string;
- i, j, Cur_row : integer;
- begin
- for i := 0 to whichGrid.rowcount do
- WhichGrid.rows[i].clear;
- for i := ord(ddfField_name) to ord(ddfformula) do
- WhichGrid.cells[i-1,0] := DictTableFieldNames[ddfOffsets(i)];
- cur_row := 1;
- for i := 0 to DictCtrl.FDBSG.rowcount - 1 do
- if DictCtrl.FDBSG.cols[ord(ddfTable_name)].strings[i] = TableName
- then begin
- for j := 1 to ord(ddfFormula) do
- WhichGrid.rows[cur_row].strings[j - 1] := DictCtrl.FDBSG.cells[j,i];
- inc(cur_row);
- end;
- AdjustColWidth(0,whichGrid);
- end;
-
- procedure TDDMultPageDlg.AnywhereKeyDown(Sender: TObject;
- var Key: Word; Shift: TShiftState);
- var i : tfieldtype;
- thischar : char;
- begin
- if DataSource1.State in [dsEdit, dsInsert, dsBrowse]
- then begin
- if key = VK_NEXT
- then DataSource1.dataset.next;
- if key = VK_PRIOR
- then DataSource1.dataset.prior;
- if key = VK_F5
- then begin
- tabset.tabindex := 0;
- tabsetClick(sender);
- end;
- if key = VK_F6
- then begin
- tabset.tabindex := 1;
- tabsetClick(sender);
- end;
- if key = VK_F7
- then begin
- tabset.tabindex := 2;
- tabsetClick(sender);
- end;
- if key = VK_F8
- then begin
- tabset.tabindex := 3;
- tabsetClick(sender);
- end;
- if key = VK_F9
- then begin
- tabset.tabindex := 4;
- tabsetClick(sender);
- end;
- if (shift = [ssCtrl]) and (key = VK_HOME)
- then DataSource1.dataset.first;
- if (shift = [ssCtrl]) and (key = VK_END)
- then DataSource1.dataset.last;
- if (shift = [ssCtrl]) and (key = VK_INSERT)
- then DataSource1.dataset.insert;
- if (shift = [ssCtrl]) and (key = VK_DELETE)
- then begin
- if messagedlg('Delete this record?', mtConfirmation, [mbYes,mbNo], 0) = mrYes
- then DataSource1.dataset.delete;
- end;
- if key = VK_F2
- then DataSource1.dataset.edit;
- if key = VK_F3
- then DataSource1.dataset.post;
- if key = VK_F4
- then DataSource1.dataset.cancel;
- if (key >= ord('A')) and (key <= ord('z'))
- then begin
- {this doesn't work because apparently focused
- is never true for a radio group? or because
- what? steping through, it always finds focused
- false}
- thischar := upcase(chr(key));
- if activeControl = TwinControl(Fieldtype_DBRadioGroup)
- then for i := ftSTring to ftGraphic do
- if upcase(thischar) = fieldtypeltr[i]
- then begin
- Fieldtype_DBRadioGroup.itemindex := ord(i) - 1;
- FieldType_DBRadioGroup.update;
- end;
- end;
- end;
- end;
-
- procedure TDDMultPageDlg.FormKeyPress(Sender: TObject; var Key: Char);
- var i : tfieldtype;
- begin
- { if Fieldtype_DBRadioGroup.focused
- then for i := ftSTring to ftGraphic do
- if upcase(key) = fieldtypeltr[i]
- then Fieldtype_DBRadioGroup.itemindex := ord(i) - 1;
-
- {key := 0;}
- end;
-
-
- procedure TDDMultPageDlg.B_hintsClick(Sender: TObject);
- begin
- if B_hints.caption = Hintson
- then begin
- B_hints.caption := Hintsoff;
- DDMultPageDlg.showHint := false;
- end
- else begin
- B_hints.caption := Hintson;
- DDMultPageDlg.showHint := true;
- end
- end;
-
- procedure TDDMultPageDlg.FontButtonClick(Sender: TObject);
- begin
- FontDialog1.Font := DDMultPageDlg.Font;
- if FontDialog1.Execute
- then DDMultPageDlg.Font := FontDialog1.Font;
- end;
-
- procedure TDDMultPageDlg.B_resizeClick(Sender: TObject);
- begin
- {ScalerForm.setWhichForm(DDMultPageDlg);
- if ScalerForm.showmodal = mrYes
- then update;}
- end;
-
- procedure TDDMultPageDlg.DBEditMemoDblClick(Sender: TObject);
- begin
- {Dangerous maneuver, typcasting like this; only doing it
- because I've carefully linked this one to the tdbmemo
- fields only.}
- Edit_memo( tdbmemo(sender), EditTable_Name.text, EditField_name.text );
- end;
-
- procedure TDDMultPageDlg.EnterEditField(Sender: TObject);
- begin
- if sender is tdbedit
- then (sender as tdbedit).color := clYellow;
- if sender is tdbCheckBox
- then (sender as tdbCheckBox).color := clYellow;
- if sender is tdbMemo
- then (sender as tdbMemo).color := clYellow;
- if sender is tdbRadioGroup
- then (sender as tdbRadioGroup).color := clYellow;
- end;
-
- procedure TDDMultPageDlg.ExitEditField(Sender: TObject);
- begin
- if sender is tdbedit
- then (sender as tdbedit).color := clWhite;
- if sender is tdbCheckBox
- then (sender as tdbCheckBox).color := clWhite;
- if sender is tdbMemo
- then (sender as tdbMemo).color := clWhite;
- if sender is tdbRadioGroup
- then (sender as tdbRadioGroup).color := clWhite;
- end;
-
- procedure TDDMultPageDlg.ExitReqField(Sender: TObject);
- {linked to required fields in object inspector}
- begin
- if sender is tdbedit
- then (sender as tdbedit).color := clLime;
- if sender is tdbCheckBox
- then (sender as tdbCheckBox).color := clLime;
- if sender is tdbRadioGroup
- then (sender as tdbRadioGroup).color := clLime;
- end;
-
- procedure TDDMultPageDlg.Field_len_Setup;
- procedure novalue;
- begin
- editfield_len.text := '0';
- editfield_len.enabled := false;
- editfield_len.tabStop := false;
- editfield_len.color := clGray;
- label3.caption := '(length)';
- label3.font.color := clGray;
- editfield_len.hint := 'Not applicable for this data type';
- end;
-
- procedure params_are(const what, newprompt : string);
- begin
- editfield_len.enabled := true;
- editField_len.TabStop := true;
- editfield_len.color := clWindow;
- label3.caption := newprompt;
- label3.font.color := clBlack;
- editfield_len.hint := what;
- end;
-
- begin
- if FieldType_DBRadioGroup.itemindex <> -1
- then case FieldType_DBRadioGroup.values[FieldType_DBRadioGroup.itemindex][1] of
- 'U' : {ftUnknown} novalue;
- 'S' : {ftString} params_are('Length of string, Max = 254', 'Length');
- 'I', {ftSmallint}
- 'N', {ftInteger}
- 'W', {ftWord}
- 'L' : {ftBoolean} novalue;
- 'F', {ftFloat}
- 'C', {ftCurrency}
- 'B' : {ftBCD} params_are('Number of places to right of decimal before rounding','Precision');
- 'D', {ftDate}
- 'T', {ftTime}
- 'A' : {ftDateTime} novalue;
- 'Y', {ftBytes}
- 'V', {ftVarBytes}
- 'O', {ftBlob}
- 'M', {ftMemo}
- 'G' : {ftGraphic} params_are('Number of bytes to be stored', 'Max length');
- end;
- end;
-
- Procedure TDDMultPageDlg.table1Field_typeValidate(sender: TField);
- begin
- if FieldType_DBRadioGroup.itemindex = -1
- then MessageDlg('Must select a data type', mtWarning, [mbOK], 0);
- end;
-
-
- procedure TDDMultPageDlg.EditFIELD_LENEnter(Sender: TObject);
- begin
- if FieldType_DBRadioGroup.itemindex = -1
- then begin
- MessageDlg('Must specify a data type', mtWarning, [mbOK], 0);
- FieldType_DBRadioGroup.setfocus;
- end
- else EditField_len.color := clYellow;
- end;
-
-
- procedure TDDMultPageDlg.toggleIDXMemoDisplay;
- begin
- if CheckBoxMDX.state = cbChecked
- then begin
- L_expression.font.color := clBlack;
- MemoIDX_EXPRES.color := clWindow;
- MemoIDX_Expres.enabled := true;
- end
- else begin
- CheckBoxMDX.state := cbUnchecked;
- L_expression.font.color := clGray;
- MemoIDX_EXPRES.color := clGray;
- MemoIDX_Expres.enabled := false;
- end;
- end;
-
- procedure TDDMultPageDlg.toggleLINKFldsDisplay;
- begin
- if CheckBoxHASLINK.state = cbChecked
- then begin
- EditSRCLINKTBL.color := clWindow;
- EditSrcLinkTbl.enabled := true;
- Label19.font.color := clBlack;
- EditSRCLINKFLD.color := clWindow;
- EditSrcLinkFld.enabled := true;
- Label18.font.color := clBlack;
- end
- else begin
- CheckBoxHasLink.state := cbUnchecked;
- EditSRCLINKTBL.color := clGray;
- EditSrcLinkTbl.enabled := false;
- Label19.font.color := clGray;
- EditSRCLINKFLD.color := clGray;
- EditSrcLinkFld.enabled := false;
- Label18.font.color := clGray;
- end;
- end;
-
- procedure TDDMultPageDlg.toggleFormulaDisplay;
- begin
- if CheckBoxIs_CALC.state = cbChecked
- then begin
- MemoFormula.color := clWindow;
- MemoFormula.enabled := true;
- label21.font.color := clBlack;
- end
- else begin
- CheckBoxIs_Calc.state := cbUnchecked;
- MemoFormula.color := clGray;
- MemoFormula.enabled := false;
- label21.font.color := clGray;
- end;
- end;
-
- procedure TDDMultPageDlg.DataSource1StateChange(Sender: TObject);
- const tble = 'Table is in %s mode';
- begin
- case DataSource1.state of
- dsInactive : GroupBox6.caption := format(tble, ['inactive']);
- dsBrowse : GroupBox6.caption := format(tble, ['browse']);
- dsEdit : GroupBox6.caption := format(tble, ['edit']);
- dsInsert : GroupBox6.caption := format(tble, ['insert']);
- dsSetKey : GroupBox6.caption := format(tble, ['set key']);
- dsCalcFields : GroupBox6.caption := format(tble, ['calc']);
- end; {case of state}
- if DataSource1.state <> dsInactive
- then GroupBox6.caption := Groupbox6.caption +
- ' # of records:'+IntToStr(main.DictTable.recordCount);
- end;
-
-
-
- procedure TDDMultPageDlg.DataSource1DataChange(Sender: TObject;
- Field: TField);
- begin
- if groupBox1.visible = true
- then begin
- toggleIDXMemoDisplay;
- toggleLinkFldsDisplay;
- toggleFormulaDisplay;
- field_len_setup;
- end;
- if main.dicttable.modified
- then begin
- main.DictWasChanged := true;
- end;
- end;
-
- procedure TDDMultPageDlg.CheckBoxMDXClick(Sender: TObject);
- begin
- ToggleIDXMemoDisplay;
- end;
-
- procedure TDDMultPageDlg.CheckBoxMDXEnter(Sender: TObject);
- begin
- ToggleIDXMemoDisplay;
- EnterEditField(sender);
- end;
-
- procedure TDDMultPageDlg.CheckBoxHASLINKClick(Sender: TObject);
- begin
- ToggleLinkFldsDisplay;
- end;
-
- procedure TDDMultPageDlg.CheckBoxHASLINKEnter(Sender: TObject);
- begin
- ToggleLinkFldsDisplay;
- EnterEditField(sender);
- end;
-
- procedure TDDMultPageDlg.CheckBoxIS_CALCClick(Sender: TObject);
- begin
- ToggleFormulaDisplay;
- end;
-
- procedure TDDMultPageDlg.CheckBoxIS_CALCEnter(Sender: TObject);
- begin
- ToggleFormulaDisplay;
- EnterEditField(sender);
- end;
-
- procedure TDDMultPageDlg.FieldType_DBRadioGroupChange(Sender: TObject);
- begin
- Field_Len_setup;
- end;
-
- procedure TDDMultPageDlg.MemoIDX_EXPRESEnter(Sender: TObject);
- {linked to IDX_EXPRESS, FORMULA memos and SRCLINK TBL & FIELD edits}
- begin
- EnterEditField(sender);
- if sender is tdbmemo
- then (sender as tdbmemo).BringToFront;
- if sender is tdbedit
- then (sender as tdbedit).BringToFront;
- end;
-
- procedure TDDMultPageDlg.MemoIDX_EXPRESExit(Sender: TObject);
- {linked to IDX_EXPRESS, FORMULA memos and SRCLINK TBL & FIELD edits}
- begin
- ExitEditField(sender);
- FieldType_DBRadioGroup.bringToFront;
- end;
-
-
-
- procedure TDDMultPageDlg.Button1Click(Sender: TObject);
- begin
- {$IFDEF buggy}
- runinfoform.updateinfo('Edit look');
- runinfoform.show;
- {$ENDIF}
-
- end;
-
- procedure TDDMultPageDlg.LB_table1Click(Sender: TObject);
- var whichTable : string;
- begin
- WhichTable := (sender as TListBox).items[(sender as TListBox).itemindex];
- if TListBox(sender).name = 'LB_table1'
- then Table_To_SG(WhichTable, SG_1);
- if TListBox(sender).name = 'LB_table2'
- then Table_To_SG(WhichTable, SG_2);
- end;
-
- procedure TDDMultPageDlg.B_doneClick(Sender: TObject);
- begin
- { main.DictwasChanged := true;}
- close;
- end;
-
- procedure TDDMultPageDlg.SG_1DblClick(Sender: TObject);
- begin
- with main.dicttable do begin
- first;
- while not eof do
- if (findfield('TABLE_NAME').text = LB_table1.items[LB_table1.itemindex])
- and (findfield('FIELD_NAME').text = SG_1.cells[0, SG_1.row])
- then break
- else next;
- end;
- end;
-
- procedure TDDMultPageDlg.SG_2DblClick(Sender: TObject);
- begin
- with main.dicttable do begin
- first;
- while not eof do
- if (findfield('TABLE_NAME').text = LB_table2.items[LB_table2.itemindex])
- and (findfield('FIELD_NAME').text = SG_2.cells[0, SG_2.row])
- then break
- else next;
- end;
- end;
-
- end.
-